home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / comm / tcp / AmiTCPsdk_40.lha / AmiTCP-4.0 / netinclude / inline / socket.h next >
C/C++ Source or Header  |  1994-10-05  |  28KB  |  934 lines

  1. #ifndef INLINE_SOCKET_H
  2. #define INLINE_SOCKET_H \
  3.        "$Id: socket.h,v 4.2 1994/10/05 23:18:36 ppessi Exp $"
  4. /*
  5.  *      Gcc inlines for bsdsocket.library. 
  6.  *
  7.  *      Copyright © 1994 AmiTCP/IP Group,
  8.  *                       Network Solutions Development, Inc.
  9.  *                       All rights reserved.
  10.  */
  11.  
  12. #include <sys/cdefs.h>
  13. #include <inline/stubs.h>
  14.  
  15. __BEGIN_DECLS
  16.  
  17. #ifdef BASE_EXT_DECL
  18. #error BASE_EXT_DECL etc declarations not allowed
  19. #endif
  20.  
  21. #ifndef SOCKETBASE_IN_CONTEXT
  22. #define BASE_EXT_DECL
  23. #define BASE_EXT_DECL0 extern struct Library * SocketBase;
  24. #define BASE_PAR_DECL
  25. #define BASE_PAR_DECL0 void
  26. #else
  27. #define BASE_EXT_DECL
  28. #define BASE_EXT_DECL0
  29. #define BASE_PAR_DECL struct Library * SocketBase,
  30. #define BASE_PAR_DECL0 struct Library * SocketBase
  31. #endif
  32. /* #define BASE_NAME SocketBase */
  33.  
  34. BASE_EXT_DECL0
  35.   
  36. #ifndef AMITCP_NEW_NAMES
  37. #define STDSOCKAPI
  38. #define          Socket    socket
  39. #define            Bind    bind
  40. #define          Listen    listen
  41. #define          Accept    accept
  42. #define         Connect    connect
  43. #define            Send    send
  44. #define          SendTo    sendto
  45. #define         SendMsg    sendmsg
  46. #define            Recv    recv
  47. #define        RecvFrom    recvfrom
  48. #define         RecvMsg    recvmsg
  49. #define        Shutdown    shutdown
  50. #define          SetSockOpt    setsockopt
  51. #define          GetSockOpt    getsockopt
  52. #define         GetSockName    getsockname
  53. #define         GetPeerName    getpeername
  54. #define           Inet_Addr    inet_addr
  55. #define        Inet_Network    inet_network
  56. #define       GetHostByName    gethostbyname
  57. #define       GetHostByAddr    gethostbyaddr
  58. #define        GetNetByName    getnetbyname
  59. #define        GetNetByAddr    getnetbyaddr
  60. #define       GetServByName    getservbyname
  61. #define    GetServByPort    getservbyport
  62. #define   GetProtoByName    getprotobyname
  63. #define GetProtoByNumber    getprotobynumber
  64. #define       GetDTableSize    getdtablesize
  65. #define         GetHostName    gethostname
  66. #define           GetHostId    gethostid
  67. #define         SyslogA    vsyslog
  68. #endif
  69.  
  70. static __inline LONG 
  71. Accept (BASE_PAR_DECL LONG s,struct sockaddr * addr,LONG * addrlen)
  72. {
  73.   BASE_EXT_DECL
  74.   register LONG  _res  __asm("d0");
  75.   register struct Library * a6 __asm("a6") = SocketBase;
  76.   register LONG d0 __asm("d0") = s;
  77.   register struct sockaddr *a0 __asm("a0") =  addr;
  78.   register LONG *a1 __asm("a1") =  addrlen;
  79.   __asm __volatile ("jsr a6@(-0x30)"
  80.   : "=r" (_res)
  81.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  82.   : "a0","a1","d0","d1", "memory");
  83.   return _res;
  84. }
  85. static __inline LONG 
  86. Bind (BASE_PAR_DECL LONG s,const struct sockaddr * name,LONG  namelen)
  87. {
  88.   BASE_EXT_DECL
  89.   register LONG  _res  __asm("d0");
  90.   register struct Library * a6 __asm("a6") = SocketBase;
  91.   register LONG d0 __asm("d0") = s;
  92.   register const struct sockaddr *a0 __asm("a0") =  name;
  93.   register LONG d1 __asm("d1") =  namelen;
  94.   __asm __volatile ("jsr a6@(-0x24)"
  95.   : "=r" (_res)
  96.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  97.   : "a0","a1","d0","d1", "memory");
  98.   return _res;
  99. }
  100. static __inline LONG 
  101. CloseSocket (BASE_PAR_DECL LONG d)
  102. {
  103.   BASE_EXT_DECL
  104.   register LONG  _res  __asm("d0");
  105.   register struct Library * a6 __asm("a6") = SocketBase;
  106.   register LONG d0 __asm("d0") = d;
  107.   __asm __volatile ("jsr a6@(-0x78)"
  108.   : "=r" (_res)
  109.   : "r" (a6), "r" (d0)
  110.   : "a0","a1","d0","d1", "memory");
  111.   return _res;
  112. }
  113. static __inline LONG 
  114. Connect (BASE_PAR_DECL LONG s,const struct sockaddr * name,LONG  namelen)
  115. {
  116.   BASE_EXT_DECL
  117.   register LONG  _res  __asm("d0");
  118.   register struct Library * a6 __asm("a6") = SocketBase;
  119.   register LONG d0 __asm("d0") = s;
  120.   register const struct sockaddr *a0 __asm("a0") =  name;
  121.   register LONG d1 __asm("d1") =  namelen;
  122.   __asm __volatile ("jsr a6@(-0x36)"
  123.   : "=r" (_res)
  124.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  125.   : "a0","a1","d0","d1", "memory");
  126.   return _res;
  127. }
  128. static __inline LONG 
  129. Dup2Socket (BASE_PAR_DECL LONG fd1,LONG  fd2)
  130. {
  131.   BASE_EXT_DECL
  132.   register LONG  _res  __asm("d0");
  133.   register struct Library * a6 __asm("a6") = SocketBase;
  134.   register LONG d0 __asm("d0") = fd1;
  135.   register LONG d1 __asm("d1") =  fd2;
  136.   __asm __volatile ("jsr a6@(-0x108)"
  137.   : "=r" (_res)
  138.   : "r" (a6), "r" (d0), "r" (d1)
  139.   : "a0","a1","d0","d1", "memory");
  140.   return _res;
  141. }
  142. static __inline LONG 
  143. Errno (BASE_PAR_DECL0)
  144. {
  145.   BASE_EXT_DECL
  146.   register LONG  _res  __asm("d0");
  147.   register struct Library * a6 __asm("a6") = SocketBase;
  148.   __asm __volatile ("jsr a6@(-0xa2)"
  149.   : "=r" (_res)
  150.   : "r" (a6)
  151.   : "a0","a1","d0","d1", "memory");
  152.   return _res;
  153. }
  154. static __inline LONG 
  155. GetDTableSize (BASE_PAR_DECL0)
  156. {
  157.   BASE_EXT_DECL
  158.   register LONG  _res  __asm("d0");
  159.   register struct Library * a6 __asm("a6") = SocketBase;
  160.   __asm __volatile ("jsr a6@(-0x8a)"
  161.   : "=r" (_res)
  162.   : "r" (a6)
  163.   : "a0","a1","d0","d1", "memory");
  164.   return _res;
  165. }
  166. static __inline struct hostent *
  167. GetHostByAddr (BASE_PAR_DECL const UBYTE *addr,LONG  len,LONG  type)
  168. {
  169.   BASE_EXT_DECL
  170.   register struct hostent * _res  __asm("d0");
  171.   register struct Library * a6 __asm("a6") = SocketBase;
  172.   register const UBYTE *a0 __asm("a0") = addr;
  173.   register LONG d0 __asm("d0") =  len;
  174.   register LONG d1 __asm("d1") =  type;
  175.   __asm __volatile ("jsr a6@(-0xd8)"
  176.   : "=r" (_res)
  177.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  178.   : "a0","a1","d0","d1", "memory");
  179.   return _res;
  180. }
  181. static __inline struct hostent *
  182. GetHostByName (BASE_PAR_DECL const UBYTE *name)
  183. {
  184.   BASE_EXT_DECL
  185.   register struct hostent * _res  __asm("d0");
  186.   register struct Library * a6 __asm("a6") = SocketBase;
  187.   register const UBYTE *a0 __asm("a0") = name;
  188.   __asm __volatile ("jsr a6@(-0xd2)"
  189.   : "=r" (_res)
  190.   : "r" (a6), "r" (a0)
  191.   : "a0","a1","d0","d1", "memory");
  192.   return _res;
  193. }
  194. static __inline ULONG 
  195. GetHostId (BASE_PAR_DECL0)
  196. {
  197.   BASE_EXT_DECL
  198.   register ULONG  _res  __asm("d0");
  199.   register struct Library * a6 __asm("a6") = SocketBase;
  200.   __asm __volatile ("jsr a6@(-0x120)"
  201.   : "=r" (_res)
  202.   : "r" (a6)
  203.   : "a0","a1","d0","d1", "memory");
  204.   return _res;
  205. }
  206. static __inline LONG 
  207. GetHostName (BASE_PAR_DECL const UBYTE *hostname,LONG  size)
  208. {
  209.   BASE_EXT_DECL
  210.   register LONG  _res  __asm("d0");
  211.   register struct Library * a6 __asm("a6") = SocketBase;
  212.   register const UBYTE *a0 __asm("a0") = hostname;
  213.   register LONG d0 __asm("d0") =  size;
  214.   __asm __volatile ("jsr a6@(-0x11a)"
  215.   : "=r" (_res)
  216.   : "r" (a6), "r" (a0), "r" (d0)
  217.   : "a0","a1","d0","d1", "memory");
  218.   return _res;
  219. }
  220. static __inline struct netent *
  221. GetNetByAddr (BASE_PAR_DECL LONG net,LONG  type)
  222. {
  223.   BASE_EXT_DECL
  224.   register struct netent * _res  __asm("d0");
  225.   register struct Library * a6 __asm("a6") = SocketBase;
  226.   register LONG d0 __asm("d0") = net;
  227.   register LONG d1 __asm("d1") =  type;
  228.   __asm __volatile ("jsr a6@(-0xe4)"
  229.   : "=r" (_res)
  230.   : "r" (a6), "r" (d0), "r" (d1)
  231.   : "a0","a1","d0","d1", "memory");
  232.   return _res;
  233. }
  234. static __inline struct netent *
  235. GetNetByName (BASE_PAR_DECL const UBYTE *name)
  236. {
  237.   BASE_EXT_DECL
  238.   register struct netent * _res  __asm("d0");
  239.   register struct Library * a6 __asm("a6") = SocketBase;
  240.   register const UBYTE *a0 __asm("a0") = name;
  241.   __asm __volatile ("jsr a6@(-0xde)"
  242.   : "=r" (_res)
  243.   : "r" (a6), "r" (a0)
  244.   : "a0","a1","d0","d1", "memory");
  245.   return _res;
  246. }
  247. static __inline LONG 
  248. GetPeerName (BASE_PAR_DECL LONG s,struct sockaddr * hostname,LONG * namelen)
  249. {
  250.   BASE_EXT_DECL
  251.   register LONG  _res  __asm("d0");
  252.   register struct Library * a6 __asm("a6") = SocketBase;
  253.   register LONG d0 __asm("d0") = s;
  254.   register struct sockaddr *a0 __asm("a0") =  hostname;
  255.   register LONG *a1 __asm("a1") =  namelen;
  256.   __asm __volatile ("jsr a6@(-0x6c)"
  257.   : "=r" (_res)
  258.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  259.   : "a0","a1","d0","d1", "memory");
  260.   return _res;
  261. }
  262. static __inline struct protoent *
  263. GetProtoByName (BASE_PAR_DECL const UBYTE *name)
  264. {
  265.   BASE_EXT_DECL
  266.   register struct protoent * _res  __asm("d0");
  267.   register struct Library * a6 __asm("a6") = SocketBase;
  268.   register const UBYTE *a0 __asm("a0") = name;
  269.   __asm __volatile ("jsr a6@(-0xf6)"
  270.   : "=r" (_res)
  271.   : "r" (a6), "r" (a0)
  272.   : "a0","a1","d0","d1", "memory");
  273.   return _res;
  274. }
  275. static __inline struct protoent *
  276. GetProtoByNumber (BASE_PAR_DECL LONG proto)
  277. {
  278.   BASE_EXT_DECL
  279.   register struct protoent * _res  __asm("d0");
  280.   register struct Library * a6 __asm("a6") = SocketBase;
  281.   register LONG d0 __asm("d0") = proto;
  282.   __asm __volatile ("jsr a6@(-0xfc)"
  283.   : "=r" (_res)
  284.   : "r" (a6), "r" (d0)
  285.   : "a0","a1","d0","d1", "memory");
  286.   return _res;
  287. }
  288. static __inline struct servent *
  289. GetServByName (BASE_PAR_DECL const UBYTE *name,const UBYTE * proto)
  290. {
  291.   BASE_EXT_DECL
  292.   register struct servent * _res  __asm("d0");
  293.   register struct Library * a6 __asm("a6") = SocketBase;
  294.   register const UBYTE *a0 __asm("a0") = name;
  295.   register const UBYTE *a1 __asm("a1") =  proto;
  296.   __asm __volatile ("jsr a6@(-0xea)"
  297.   : "=r" (_res)
  298.   : "r" (a6), "r" (a0), "r" (a1)
  299.   : "a0","a1","d0","d1", "memory");
  300.   return _res;
  301. }
  302. static __inline struct servent *
  303. GetServByPort (BASE_PAR_DECL LONG port,const UBYTE * proto)
  304. {
  305.   BASE_EXT_DECL
  306.   register struct servent * _res  __asm("d0");
  307.   register struct Library * a6 __asm("a6") = SocketBase;
  308.   register LONG d0 __asm("d0") = port;
  309.   register const UBYTE *a0 __asm("a0") =  proto;
  310.   __asm __volatile ("jsr a6@(-0xf0)"
  311.   : "=r" (_res)
  312.   : "r" (a6), "r" (d0), "r" (a0)
  313.   : "a0","a1","d0","d1", "memory");
  314.   return _res;
  315. }
  316. static __inline LONG 
  317. GetSocketEvents (BASE_PAR_DECL ULONG *eventmaskp)
  318. {
  319.   BASE_EXT_DECL
  320.   register LONG  _res  __asm("d0");
  321.   register struct Library * a6 __asm("a6") = SocketBase;
  322.   register ULONG *a0 __asm("a0") = eventmaskp;
  323.   __asm __volatile ("jsr a6@(-0x12c)"
  324.   : "=r" (_res)
  325.   : "r" (a6), "r" (a0)
  326.   : "a0","a1","d0","d1", "memory");
  327.   return _res;
  328. }
  329. static __inline LONG 
  330. GetSockName (BASE_PAR_DECL LONG s,struct sockaddr * hostname,LONG * namelen)
  331. {
  332.   BASE_EXT_DECL
  333.   register LONG  _res  __asm("d0");
  334.   register struct Library * a6 __asm("a6") = SocketBase;
  335.   register LONG d0 __asm("d0") = s;
  336.   register struct sockaddr *a0 __asm("a0") =  hostname;
  337.   register LONG *a1 __asm("a1") =  namelen;
  338.   __asm __volatile ("jsr a6@(-0x66)"
  339.   : "=r" (_res)
  340.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  341.   : "a0","a1","d0","d1", "memory");
  342.   return _res;
  343. }
  344. static __inline LONG 
  345. GetSockOpt (BASE_PAR_DECL LONG s,LONG  level,LONG  optname,void * optval,LONG * optlen)
  346. {
  347.   BASE_EXT_DECL
  348.   register LONG  _res  __asm("d0");
  349.   register struct Library * a6 __asm("a6") = SocketBase;
  350.   register LONG d0 __asm("d0") = s;
  351.   register LONG d1 __asm("d1") =  level;
  352.   register LONG d2 __asm("d2") =  optname;
  353.   register void *a0 __asm("a0") =  optval;
  354.   register LONG *a1 __asm("a1") =  optlen;
  355.   __asm __volatile ("jsr a6@(-0x60)"
  356.   : "=r" (_res)
  357.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (a0), "r" (a1)
  358.   : "a0","a1","d0","d1","d2", "memory");
  359.   return _res;
  360. }
  361. static __inline ULONG 
  362. Inet_Addr (BASE_PAR_DECL const UBYTE * cp)
  363. {
  364.   BASE_EXT_DECL
  365.   register ULONG  _res  __asm("d0");
  366.   register struct Library * a6 __asm("a6") = SocketBase;
  367.   register const UBYTE * a0 __asm("a0") = cp;
  368.   __asm __volatile ("jsr a6@(-0xb4)"
  369.   : "=r" (_res)
  370.   : "r" (a6), "r" (a0)
  371.   : "a0","a1","d0","d1", "memory");
  372.   return _res;
  373. }
  374. static __inline ULONG 
  375. Inet_LnaOf (BASE_PAR_DECL LONG in)
  376. {
  377.   BASE_EXT_DECL
  378.   register ULONG  _res  __asm("d0");
  379.   register struct Library * a6 __asm("a6") = SocketBase;
  380.   register LONG d0 __asm("d0") = in;
  381.   __asm __volatile ("jsr a6@(-0xba)"
  382.   : "=r" (_res)
  383.   : "r" (a6), "r" (d0)
  384.   : "a0","a1","d0","d1", "memory");
  385.   return _res;
  386. }
  387. static __inline ULONG 
  388. Inet_MakeAddr (BASE_PAR_DECL ULONG net,ULONG  host)
  389. {
  390.   BASE_EXT_DECL
  391.   register ULONG  _res  __asm("d0");
  392.   register struct Library * a6 __asm("a6") = SocketBase;
  393.   register ULONG d0 __asm("d0") = net;
  394.   register ULONG d1 __asm("d1") =  host;
  395.   __asm __volatile ("jsr a6@(-0xc6)"
  396.   : "=r" (_res)
  397.   : "r" (a6), "r" (d0), "r" (d1)
  398.   : "a0","a1","d0","d1", "memory");
  399.   return _res;
  400. }
  401. static __inline ULONG 
  402. Inet_NetOf (BASE_PAR_DECL LONG in)
  403. {
  404.   BASE_EXT_DECL
  405.   register ULONG  _res  __asm("d0");
  406.   register struct Library * a6 __asm("a6") = SocketBase;
  407.   register LONG d0 __asm("d0") = in;
  408.   __asm __volatile ("jsr a6@(-0xc0)"
  409.   : "=r" (_res)
  410.   : "r" (a6), "r" (d0)
  411.   : "a0","a1","d0","d1", "memory");
  412.   return _res;
  413. }
  414. static __inline ULONG 
  415. Inet_Network (BASE_PAR_DECL const UBYTE * cp)
  416. {
  417.   BASE_EXT_DECL
  418.   register ULONG  _res  __asm("d0");
  419.   register struct Library * a6 __asm("a6") = SocketBase;
  420.   register const UBYTE * a0 __asm("a0") = cp;
  421.   __asm __volatile ("jsr a6@(-0xcc)"
  422.   : "=r" (_res)
  423.   : "r" (a6), "r" (a0)
  424.   : "a0","a1","d0","d1", "memory");
  425.   return _res;
  426. }
  427. static __inline char *
  428. Inet_NtoA (BASE_PAR_DECL ULONG in)
  429. {
  430.   BASE_EXT_DECL
  431.   register char * _res  __asm("d0");
  432.   register struct Library * a6 __asm("a6") = SocketBase;
  433.   register ULONG d0 __asm("d0") = in;
  434.   __asm __volatile ("jsr a6@(-0xae)"
  435.   : "=r" (_res)
  436.   : "r" (a6), "r" (d0)
  437.   : "a0","a1","d0","d1", "memory");
  438.   return _res;
  439. }
  440. static __inline LONG 
  441. IoctlSocket (BASE_PAR_DECL LONG d,ULONG  request,char * argp)
  442. {
  443.   BASE_EXT_DECL
  444.   register LONG  _res  __asm("d0");
  445.   register struct Library * a6 __asm("a6") = SocketBase;
  446.   register LONG d0 __asm("d0") = d;
  447.   register ULONG d1 __asm("d1") =  request;
  448.   register char *a0 __asm("a0") =  argp;
  449.   __asm __volatile ("jsr a6@(-0x72)"
  450.   : "=r" (_res)
  451.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  452.   : "a0","a1","d0","d1", "memory");
  453.   return _res;
  454. }
  455. static __inline LONG 
  456. Listen (BASE_PAR_DECL LONG s,LONG  backlog)
  457. {
  458.   BASE_EXT_DECL
  459.   register LONG  _res  __asm("d0");
  460.   register struct Library * a6 __asm("a6") = SocketBase;
  461.   register LONG d0 __asm("d0") = s;
  462.   register LONG d1 __asm("d1") =  backlog;
  463.   __asm __volatile ("jsr a6@(-0x2a)"
  464.   : "=r" (_res)
  465.   : "r" (a6), "r" (d0), "r" (d1)
  466.   : "a0","a1","d0","d1", "memory");
  467.   return _res;
  468. }
  469. static __inline LONG 
  470. ObtainSocket (BASE_PAR_DECL LONG id,LONG  domain,LONG  type,LONG  protocol)
  471. {
  472.   BASE_EXT_DECL
  473.   register LONG  _res  __asm("d0");
  474.   register struct Library * a6 __asm("a6") = SocketBase;
  475.   register LONG d0 __asm("d0") = id;
  476.   register LONG d1 __asm("d1") =  domain;
  477.   register LONG d2 __asm("d2") =  type;
  478.   register LONG d3 __asm("d3") =  protocol;
  479.   __asm __volatile ("jsr a6@(-0x90)"
  480.   : "=r" (_res)
  481.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  482.   : "a0","a1","d0","d1","d2","d3", "memory");
  483.   return _res;
  484. }
  485. static __inline LONG 
  486. Recv (BASE_PAR_DECL LONG s,UBYTE * buf,LONG  len,LONG  flags)
  487. {
  488.   BASE_EXT_DECL
  489.   register LONG  _res  __asm("d0");
  490.   register struct Library * a6 __asm("a6") = SocketBase;
  491.   register LONG d0 __asm("d0") = s;
  492.   register UBYTE *a0 __asm("a0") =  buf;
  493.   register LONG d1 __asm("d1") =  len;
  494.   register LONG d2 __asm("d2") =  flags;
  495.   __asm __volatile ("jsr a6@(-0x4e)"
  496.   : "=r" (_res)
  497.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2)
  498.   : "a0","a1","d0","d1","d2", "memory");
  499.   return _res;
  500. }
  501. static __inline LONG 
  502. RecvFrom (BASE_PAR_DECL LONG s,UBYTE * buf,LONG  len,LONG  flags,struct sockaddr * from,LONG * fromlen)
  503. {
  504.   BASE_EXT_DECL
  505.   register LONG  _res  __asm("d0");
  506.   register struct Library * a6 __asm("a6") = SocketBase;
  507.   register LONG d0 __asm("d0") = s;
  508.   register UBYTE *a0 __asm("a0") =  buf;
  509.   register LONG d1 __asm("d1") =  len;
  510.   register LONG d2 __asm("d2") =  flags;
  511.   register struct sockaddr *a1 __asm("a1") =  from;
  512.   register LONG *a2 __asm("a2") =  fromlen;
  513.   __asm __volatile ("jsr a6@(-0x48)"
  514.   : "=r" (_res)
  515.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2), "r" (a1), "r" (a2)
  516.   : "a0","a1","a2","d0","d1","d2", "memory");
  517.   return _res;
  518. }
  519. static __inline LONG 
  520. RecvMsg (BASE_PAR_DECL LONG s,struct msghdr *  msg,LONG  flags)
  521. {
  522.   BASE_EXT_DECL
  523.   register LONG  _res  __asm("d0");
  524.   register struct Library * a6 __asm("a6") = SocketBase;
  525.   register LONG d0 __asm("d0") = s;
  526.   register struct msghdr * a0 __asm("a0") =  msg;
  527.   register LONG d1 __asm("d1") =  flags;
  528.   __asm __volatile ("jsr a6@(-0x114)"
  529.   : "=r" (_res)
  530.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  531.   : "a0","a1","d0","d1", "memory");
  532.   return _res;
  533. }
  534. static __inline LONG 
  535. ReleaseCopyOfSocket (BASE_PAR_DECL LONG fd,LONG  id)
  536. {
  537.   BASE_EXT_DECL
  538.   register LONG  _res  __asm("d0");
  539.   register struct Library * a6 __asm("a6") = SocketBase;
  540.   register LONG d0 __asm("d0") = fd;
  541.   register LONG d1 __asm("d1") =  id;
  542.   __asm __volatile ("jsr a6@(-0x9c)"
  543.   : "=r" (_res)
  544.   : "r" (a6), "r" (d0), "r" (d1)
  545.   : "a0","a1","d0","d1", "memory");
  546.   return _res;
  547. }
  548. static __inline LONG 
  549. ReleaseSocket (BASE_PAR_DECL LONG fd,LONG  id)
  550. {
  551.   BASE_EXT_DECL
  552.   register LONG  _res  __asm("d0");
  553.   register struct Library * a6 __asm("a6") = SocketBase;
  554.   register LONG d0 __asm("d0") = fd;
  555.   register LONG d1 __asm("d1") =  id;
  556.   __asm __volatile ("jsr a6@(-0x96)"
  557.   : "=r" (_res)
  558.   : "r" (a6), "r" (d0), "r" (d1)
  559.   : "a0","a1","d0","d1", "memory");
  560.   return _res;
  561. }
  562. static __inline LONG 
  563. Send (BASE_PAR_DECL LONG s,const UBYTE * msg,LONG  len,LONG  flags)
  564. {
  565.   BASE_EXT_DECL
  566.   register LONG  _res  __asm("d0");
  567.   register struct Library * a6 __asm("a6") = SocketBase;
  568.   register LONG d0 __asm("d0") = s;
  569.   register const UBYTE *a0 __asm("a0") =  msg;
  570.   register LONG d1 __asm("d1") =  len;
  571.   register LONG d2 __asm("d2") =  flags;
  572.   __asm __volatile ("jsr a6@(-0x42)"
  573.   : "=r" (_res)
  574.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2)
  575.   : "a0","a1","d0","d1","d2", "memory");
  576.   return _res;
  577. }
  578. static __inline LONG 
  579. SendMsg (BASE_PAR_DECL LONG s,struct msghdr *  msg,LONG  flags)
  580. {
  581.   BASE_EXT_DECL
  582.   register LONG  _res  __asm("d0");
  583.   register struct Library * a6 __asm("a6") = SocketBase;
  584.   register LONG d0 __asm("d0") = s;
  585.   register struct msghdr * a0 __asm("a0") =  msg;
  586.   register LONG d1 __asm("d1") =  flags;
  587.   __asm __volatile ("jsr a6@(-0x10e)"
  588.   : "=r" (_res)
  589.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  590.   : "a0","a1","d0","d1", "memory");
  591.   return _res;
  592. }
  593. static __inline LONG 
  594. SendTo (BASE_PAR_DECL LONG s,const UBYTE * msg,LONG  len,LONG  flags,const struct sockaddr * to,LONG  tolen)
  595. {
  596.   BASE_EXT_DECL
  597.   register LONG  _res  __asm("d0");
  598.   register struct Library * a6 __asm("a6") = SocketBase;
  599.   register LONG d0 __asm("d0") = s;
  600.   register const UBYTE *a0 __asm("a0") =  msg;
  601.   register LONG d1 __asm("d1") =  len;
  602.   register LONG d2 __asm("d2") =  flags;
  603.   register const struct sockaddr *a1 __asm("a1") =  to;
  604.   register LONG d3 __asm("d3") =  tolen;
  605.   __asm __volatile ("jsr a6@(-0x3c)"
  606.   : "=r" (_res)
  607.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2), "r" (a1), "r" (d3)
  608.   : "a0","a1","d0","d1","d2","d3", "memory");
  609.   return _res;
  610. }
  611. static __inline void 
  612. SetErrnoPtr (BASE_PAR_DECL void *errno_p,LONG  size)
  613. {
  614.   BASE_EXT_DECL
  615.   register struct Library * a6 __asm("a6") = SocketBase;
  616.   register void *a0 __asm("a0") = errno_p;
  617.   register LONG d0 __asm("d0") =  size;
  618.   __asm __volatile ("jsr a6@(-0xa8)"
  619.   : /* no output */
  620.   : "r" (a6), "r" (a0), "r" (d0)
  621.   : "a0","a1","d0","d1", "memory");
  622. }
  623. static __inline LONG 
  624. SetSockOpt (BASE_PAR_DECL LONG s,LONG  level,LONG  optname,const void * optval,LONG  optlen)
  625. {
  626.   BASE_EXT_DECL
  627.   register LONG  _res  __asm("d0");
  628.   register struct Library * a6 __asm("a6") = SocketBase;
  629.   register LONG d0 __asm("d0") = s;
  630.   register LONG d1 __asm("d1") =  level;
  631.   register LONG d2 __asm("d2") =  optname;
  632.   register const void *a0 __asm("a0") =  optval;
  633.   register LONG d3 __asm("d3") =  optlen;
  634.   __asm __volatile ("jsr a6@(-0x5a)"
  635.   : "=r" (_res)
  636.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (a0), "r" (d3)
  637.   : "a0","a1","d0","d1","d2","d3", "memory");
  638.   return _res;
  639. }
  640. static __inline void 
  641. SetSocketSignals (BASE_PAR_DECL ULONG SIGINTR,ULONG  SIGIO,ULONG  SIGURG)
  642. {
  643.   BASE_EXT_DECL
  644.   register struct Library * a6 __asm("a6") = SocketBase;
  645.   register ULONG d0 __asm("d0") = SIGINTR;
  646.   register ULONG d1 __asm("d1") =  SIGIO;
  647.   register ULONG d2 __asm("d2") =  SIGURG;
  648.   __asm __volatile ("jsr a6@(-0x84)"
  649.   : /* no output */
  650.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2)
  651.   : "a0","a1","d0","d1","d2", "memory");
  652. }
  653. static __inline LONG 
  654. Shutdown (BASE_PAR_DECL LONG s,LONG  how)
  655. {
  656.   BASE_EXT_DECL
  657.   register LONG  _res  __asm("d0");
  658.   register struct Library * a6 __asm("a6") = SocketBase;
  659.   register LONG d0 __asm("d0") = s;
  660.   register LONG d1 __asm("d1") =  how;
  661.   __asm __volatile ("jsr a6@(-0x54)"
  662.   : "=r" (_res)
  663.   : "r" (a6), "r" (d0), "r" (d1)
  664.   : "a0","a1","d0","d1", "memory");
  665.   return _res;
  666. }
  667. static __inline LONG 
  668. Socket (BASE_PAR_DECL LONG domain,LONG  type,LONG  protocol)
  669. {
  670.   BASE_EXT_DECL
  671.   register LONG  _res  __asm("d0");
  672.   register struct Library * a6 __asm("a6") = SocketBase;
  673.   register LONG d0 __asm("d0") = domain;
  674.   register LONG d1 __asm("d1") =  type;
  675.   register LONG d2 __asm("d2") =  protocol;
  676.   __asm __volatile ("jsr a6@(-0x1e)"
  677.   : "=r" (_res)
  678.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2)
  679.   : "a0","a1","d0","d1","d2", "memory");
  680.   return _res;
  681. }
  682. static __inline LONG 
  683. SocketBaseTagList (BASE_PAR_DECL struct TagItem *taglist)
  684. {
  685.   BASE_EXT_DECL
  686.   register LONG  _res  __asm("d0");
  687.   register struct Library * a6 __asm("a6") = SocketBase;
  688.   register struct TagItem *a0 __asm("a0") = taglist;
  689.   __asm __volatile ("jsr a6@(-0x126)"
  690.   : "=r" (_res)
  691.   : "r" (a6), "r" (a0)
  692.   : "a0","a1","d0","d1", "memory");
  693.   return _res;
  694. }
  695.  
  696. #ifndef NO_INLINE_STDARG
  697. #define SocketBaseTags(tags...) \
  698.     ({ ULONG _tags[] = { tags }; SocketBaseTagList(_tags); })
  699. #endif
  700.  
  701. static __inline LONG 
  702. WaitSelect (BASE_PAR_DECL LONG nfds,fd_set * readfds,fd_set * writefds,fd_set * execptfds,struct timeval * timeout,ULONG * maskp)
  703. {
  704.   BASE_EXT_DECL
  705.   register LONG  _res  __asm("d0");
  706.   register struct Library * a6 __asm("a6") = SocketBase;
  707.   register LONG d0 __asm("d0") = nfds;
  708.   register fd_set *a0 __asm("a0") =  readfds;
  709.   register fd_set *a1 __asm("a1") =  writefds;
  710.   register fd_set *a2 __asm("a2") =  execptfds;
  711.   register struct timeval *a3 __asm("a3") =  timeout;
  712.   register ULONG *d1 __asm("d1") =  maskp;
  713.   __asm __volatile ("jsr a6@(-0x7e)"
  714.   : "=r" (_res)
  715.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (d1)
  716.   : "a0","a1","a2","a3","d0","d1", "memory");
  717.   return _res;
  718. }
  719.  
  720.  
  721. #ifdef STDSOCKAPI
  722. #undef STDSOCKAPI
  723. #undef Socket
  724. #undef Bind
  725. #undef Listen
  726. #undef Accept
  727. #undef Connect
  728. #undef Send
  729. #undef SendTo
  730. #undef SendMsg
  731. #undef Recv
  732. #undef RecvFrom
  733. #undef RecvMsg
  734. #undef Shutdown
  735. #undef SetSockOpt
  736. #undef GetSockOpt
  737. #undef GetSockName
  738. #undef GetPeerName
  739. #undef Inet_Addr
  740. #undef Inet_Network
  741. #undef GetHostByName
  742. #undef GetHostByAddr
  743. #undef GetNetByName
  744. #undef GetNetByAddr
  745. #undef GetServByName
  746. #undef GetServByPort
  747. #undef GetProtoByName
  748. #undef GetProtoByNumber
  749. #undef GetDTableSize
  750. #undef GetHostName
  751. #undef GetHostId
  752. #undef SyslogA
  753. #endif
  754.  
  755.  
  756. static __inline LONG 
  757. InheritSocket (BASE_PAR_DECL LONG id)
  758. {
  759.   BASE_EXT_DECL
  760.   register LONG  _res  __asm("d0");
  761.   register struct Library * a6 __asm("a6") = SocketBase;
  762.   register LONG d0 __asm("d0") = id;
  763.   register LONG d1 __asm("d1") =  0;
  764.   __asm __volatile ("jsr a6@(-0x90)"
  765.   : "=r" (_res)
  766.   : "r" (a6), "r" (d0), "r" (d1)
  767.   : "a0","a1","d0","d1", "memory");
  768.   return _res;
  769. }
  770.  
  771.  
  772. #ifdef SOCKETBASE_IN_CONTEXT
  773.  
  774. #ifdef AMITCP_NEW_NAMES
  775.  
  776. #define             Socket(r...)    Socket(SocketBase, r)
  777. #define               Bind(r...)    Bind(SocketBase, r)
  778. #define             Listen(r...)    Listen(SocketBase, r)
  779. #define             Accept(r...)    Accept(SocketBase, r)
  780. #define            Connect(r...)    Connect(SocketBase, r)
  781. #define             SendTo(r...)    SendTo(SocketBase, r)
  782. #define               Send(r...)    Send(SocketBase, r)
  783. #define           RecvFrom(r...)    RecvFrom(SocketBase, r)
  784. #define               Recv(r...)    Recv(SocketBase, r)
  785. #define           Shutdown(r...)    Shutdown(SocketBase, r)
  786. #define         SetSockOpt(r...)    SetSockOpt(SocketBase, r)
  787. #define         GetSockOpt(r...)    GetSockOpt(SocketBase, r)
  788. #define        GetSockName(r...)    GetSockName(SocketBase, r)
  789. #define        GetPeerName(r...)    GetPeerName(SocketBase, r)
  790.  
  791. #define          GetDTableSize()        GetDTableSize(SocketBase)
  792.  
  793. #define          Inet_Addr(r...)    Inet_Addr(SocketBase, r)
  794. #define           Inet_Network(r...)    Inet_Network(SocketBase, r)
  795. #define          GetHostByName(r...)    GetHostByName(SocketBase, r)
  796. #define          GetHostByAddr(r...)    GetHostByAddr(SocketBase, r)
  797. #define           GetNetByName(r...)    GetNetByName(SocketBase, r)
  798. #define           GetNetByAddr(r...)    GetNetByAddr(SocketBase, r)
  799. #define          GetServByName(r...)    GetServByName(SocketBase, r)
  800. #define          GetServByPort(r...)    GetServByPort(SocketBase, r)
  801. #define         GetProtoByName(r...)    GetProtoByName(SocketBase, r)
  802. #define       GetProtoByNumber(r...)    GetProtoByNumber(SocketBase, r)
  803.  
  804. #define            SyslogA(r...)    SyslogA(SocketBase, r)
  805.  
  806. #define            SendMsg(r...)    SendMsg(SocketBase, r)
  807. #define            RecvMsg(r...)    RecvMsg(SocketBase, r)
  808.  
  809. #define        GetHostName(r...)    GetHostName(SocketBase, r)
  810. #define          GetHostId()        GetHostId(SocketBase)
  811.  
  812. #else /* AMITCP_OLD_NAMES */
  813.  
  814. #define             socket(r...)    socket(SocketBase, r)
  815. #define               bind(r...)    bind(SocketBase, r)
  816. #define             listen(r...)    listen(SocketBase, r)
  817. #define             accept(r...)    accept(SocketBase, r)
  818. #define            connect(r...)    connect(SocketBase, r)
  819. #define             sendto(r...)    sendto(SocketBase, r)
  820. #define               send(r...)    send(SocketBase, r)
  821. #define           recvfrom(r...)    recvfrom(SocketBase, r)
  822. #define               recv(r...)    recv(SocketBase, r)
  823. #define           shutdown(r...)    shutdown(SocketBase, r)
  824. #define         setsockopt(r...)    setsockopt(SocketBase, r)
  825. #define         getsockopt(r...)    getsockopt(SocketBase, r)
  826. #define        getsockname(r...)    getsockname(SocketBase, r)
  827. #define        getpeername(r...)    getpeername(SocketBase, r)
  828.  
  829. #define          getdtablesize()        getdtablesize(SocketBase)
  830.  
  831. #define          inet_addr(r...)    inet_addr(SocketBase, r)
  832. #define           inet_network(r...)    inet_network(SocketBase, r)
  833.  
  834. #define          gethostbyname(r...)    gethostbyname(SocketBase, r)
  835. #define          gethostbyaddr(r...)    gethostbyaddr(SocketBase, r)
  836. #define           getnetbyname(r...)    getnetbyname(SocketBase, r)
  837. #define           getnetbyaddr(r...)    getnetbyaddr(SocketBase, r)
  838. #define          getservbyname(r...)    getservbyname(SocketBase, r)
  839. #define          getservbyport(r...)    getservbyport(SocketBase, r)
  840. #define         getprotobyname(r...)    getprotobyname(SocketBase, r)
  841. #define       getprotobynumber(r...)    getprotobynumber(SocketBase, r)
  842.  
  843. #define            vsyslog(r...)    vsyslog(SocketBase, r)
  844.  
  845. #define            sendmsg(r...)    sendmsg(SocketBase, r)
  846. #define            recvmsg(r...)    recvmsg(SocketBase, r)
  847.  
  848. #define        gethostname(r...)    gethostname(SocketBase, r)
  849. #define          gethostid()        gethostid(SocketBase)
  850.  
  851. #endif /* AMITCP_NEW_NAMES */
  852.  
  853. #define        IoctlSocket(r...)    IoctlSocket(SocketBase, r)
  854. #define        CloseSocket(r...)    CloseSocket(SocketBase, r)
  855.  
  856. #define         WaitSelect(r...)    WaitSelect(SocketBase, r)
  857. #define       SetSocketSignals(r...)    SetSocketSignals(SocketBase, r)
  858.  
  859. #define           ObtainSocket(r...)    ObtainSocket(SocketBase, r)
  860. #define          ReleaseSocket(r...)    ReleaseSocket(SocketBase, r)
  861. #define ReleaseCopyOfSocket(r...)    ReleaseCopyOfSocket(SocketBase, r)
  862. #define              Errno()        Errno(SocketBase)
  863. #define        SetErrnoPtr(r...)    SetErrnoPtr(SocketBase, r)
  864.  
  865. #define          Inet_NtoA(r...)    Inet_NtoA(SocketBase, r)
  866. #define         Inet_LnaOf(r...)    Inet_LnaOf(SocketBase, r)
  867. #define         Inet_NetOf(r...)    Inet_NetOf(SocketBase, r)
  868. #define          Inet_MakeAddr(r...)    Inet_MakeAddr(SocketBase, r)
  869.  
  870. #define   SocketBaseTagList(r...)    SocketBaseTagList(SocketBase, r)
  871.  
  872. #define        GetSocketEvents(r...)    GetSocketEvents(SocketBase, r)
  873.  
  874. #define          InheritSocket(r...)    InheritSocket(SocketBase, r)
  875.  
  876. #endif /* SOCKETBASE_IN_CONTEXT */
  877.  
  878.  
  879. #ifndef AMITCP_NEW_NAMES
  880.  
  881. #include <netinet/in.h>
  882.  
  883. static __inline LONG
  884.   select(BASE_PAR_DECL LONG nfds, fd_set *readfds, fd_set *writefds, fd_set *exeptfds, struct timeval *timeout)
  885. {
  886.   return WaitSelect(nfds, readfds, writefds, exeptfds, timeout, NULL);
  887. }
  888.  
  889. static __inline char * 
  890.   inet_ntoa(BASE_PAR_DECL struct in_addr addr) 
  891. {
  892.   return Inet_NtoA(addr.s_addr);
  893. }
  894. static __inline struct in_addr
  895.   inet_makeaddr(BASE_PAR_DECL int net, int host)
  896. {
  897.   struct in_addr addr;
  898.  
  899.   addr.s_addr = Inet_MakeAddr(net, host);
  900.   return addr;
  901. }
  902. static __inline unsigned long
  903.   inet_lnaof(BASE_PAR_DECL struct in_addr addr) 
  904. {
  905.   return Inet_LnaOf(addr.s_addr);
  906. }
  907. static __inline unsigned long
  908.   inet_netof(BASE_PAR_DECL struct in_addr addr)
  909. {
  910.   return Inet_NetOf(addr.s_addr);
  911. }
  912.  
  913. #ifdef SOCKETBASE_IN_CONTEXT
  914.  
  915. #define           select(r...)    select(SocketBase, r)
  916. #define     inet_ntoa(r...)    inet_ntoa(SocketBase, r)
  917. #define inet_makeaddr(r...)    inet_makeaddr(SocketBase, r)
  918. #define    inet_lnaof(r...)    inet_lnaof(SocketBase, r)
  919. #define    inet_netof(r...)    inet_netof(SocketBase, r)
  920.  
  921. #endif /* SOCKETBASE_IN_CONTEXT */
  922.  
  923. #endif /* ! AMITCP_NEW_NAMES */
  924.  
  925.  
  926. #undef BASE_EXT_DECL
  927. #undef BASE_PAR_DECL
  928. #undef BASE_PAR_DECL0
  929. /* #undef BASE_NAME */
  930.  
  931. __END_DECLS
  932.  
  933. #endif /* !INLINE_SOCKET_H */
  934.